package antgo

import (
	"gitee.com/xiedongji/antgo/core"
	"gitee.com/xiedongji/antgo/cpts/xlog"
	"gitee.com/xiedongji/antgo/helper/xdebug"
	"github.com/rs/zerolog"
	"os"
	"path/filepath"
)

/* ============================================================ *
 * 功能:框架入口
 * 描述:项目组件加载、配置文件的初始化
 * ============================================================ */

// 框架初始化
func coreInit() {
	// 获取运行环境
	core.RunEnv = os.Getenv("APP_ENV")

	// 没有配置环境变量 默认 调试模式
	if core.RunEnv == "" {
		core.RunEnv = core.DevEnv
	}

	// 获取当前工作目录
	if core.WorkDir == "" {
		core.WorkDir, _ = os.Getwd()
	}

	// 切换目录 用于创建根目录 日志文件夹
	os.Chdir(core.WorkDir)

	cfgFilename := "app" // app配置文件名称
	cfgFile := filepath.Join(core.WorkDir, cfgFilename+".yml")

	if err := core.LoadGlobalConfigFile(cfgFile); err != nil {
		xlog.Logger(core.AppLogName, "run").Warn().Str("path", cfgFile).Msg("加载配置文件失败")
	}

	l := xlog.Instance{}
	l.Run()
}

// 加载 配置文件 和 初始化组件
func InitFrame(instances ...core.Cpt) {
	coreInit()
	core.LoadCpts(instances...)
	defer xdebug.New().Msg("================ AntGo 初始化完成 ! ================")
}

// =========== 快捷函数入口 ===========
func LoadCpts(instances ...core.Cpt) {
	core.LoadCpts(instances...)
}

// 日志相关
func Logger(name string, tag string) *zerolog.Logger {
	return xlog.Logger(name, tag)
}

// 工作目录相关
func SetWorkDir(dir string) {
	core.WorkDir = dir
}

func GetWorkDir() string {
	return core.WorkDir
}

// 运行环境相关
func SetRunEnv(env string) {
	core.RunEnv = env
}

func GetRunEnv() string {
	return core.RunEnv
}

// 系统信号操作相关
func SignalBindFunc(handler func(sig os.Signal), signals ...os.Signal) {
	core.SignalBindFunHandler(handler, signals...)
}

func SignalNotify() {
	core.SignalNotify()
}
